package com.controller;

import com.bean.User;
import com.common.Result;
import com.service.UserService;
import com.utils.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;

    /**
     * 根据用户 id 查询用户信息
     * @param id 用户 id
     * @return 封装的结果
     */
    @GetMapping("/{id}")
    public Result<User> getUserById(@PathVariable Integer id) {
        User user = userService.getUserById(id);
        if (user != null) {
            return Result.success(user);
        } else {
            return Result.fail("用户不存在");
        }
    }

    /**
     * 根据用户名查询用户信息
     * @param username 用户名
     * @return 封装的结果
     */
    @GetMapping("/username/{username}")
    public Result<User> getUserByUsername(@PathVariable String username) {
        User user = userService.getUserByUsername(username);
        if (user != null) {
            return Result.success(user);
        } else {
            return Result.fail("用户不存在");
        }
    }

    /**
     * 模糊查询用户信息并分页
     * @param keyword 模糊查询关键字
     * @param pageNum 当前页码
     * @param pageSize 每页数量
     * @return 封装的结果
     */
    @GetMapping
    public Result<PageInfo<User>> getAllUsers(@RequestParam(required = false) String keyword,
                                              @RequestParam(defaultValue = "1") int pageNum,
                                              @RequestParam(defaultValue = "10") int pageSize) {
        if (keyword == null) {
            keyword = "";
        }
        PageInfo<User> pageInfo = userService.getUsersByKeyword(keyword, pageNum, pageSize);
        return Result.success(pageInfo);
    }

    /**
     * 用户登录接口
     * @param username 用户名
     * @param password 密码
     * @return 封装的结果
     */
    @PostMapping("/login")
    public Result<User> login(@RequestParam String username, @RequestParam String password) {
        User user = userService.login(username, password);
        if (user != null) {
            return Result.success(user);
        } else {
            return Result.fail("用户名或密码错误");
        }
    }

    /**
     * 用户注册接口
     * @param user 用户对象
     * @return 封装的结果
     */
    @PostMapping("/register")
    public Result<Boolean> register(@RequestBody User user) {
        boolean result = userService.register(user);
        if (result) {
            return Result.success(true);
        } else {
            return Result.fail("注册失败，用户名可能已存在");
        }
    }

    /**
     * 根据用户 ID 更新用户信息
     * @param user 用户对象
     * @return 封装的结果
     */
    @PutMapping
    public Result<Boolean> updateUser(@RequestBody User user) {
        boolean result = userService.updateUser(user);
        if (result) {
            return Result.success(true);
        } else {
            return Result.fail("更新失败，用户可能不存在");
        }
    }

    /**
     * 根据用户 ID 删除用户信息
     * @param id 用户 ID
     * @return 封装的结果
     */
    @DeleteMapping("/{id}")
    public Result<Boolean> deleteUserById(@PathVariable Integer id) {
        boolean result = userService.deleteUserById(id);
        if (result) {
            return Result.success(true);
        } else {
            return Result.fail("删除失败，用户可能不存在");
        }
    }
}